#ifndef MAINWND_H
#define MAINWND_H

#include <QWidget>

#include "CSerialCommandWrapper.h"
#include "CommonType.h"

namespace Ui {
class MainWnd;
}

class MainWnd : public QWidget
{
    Q_OBJECT

public:
    explicit MainWnd(QWidget *parent = 0);
    ~MainWnd();

    // 传入串口读取到的数据
    void SerialCommandResult(const unsigned char cmd, zl::zlmodules::CommandResultType type, QByteArray& data);

    // 传入串口读取到的结果信息
    void SerialMsgInfo(const unsigned char cmd, QByteArray& data);

    // 传入配置参数
    void SetConfigInfo(const QString& version, bool powerControl);

protected:

    // 设置版本信息
    void setVersionInfo(const QString& version);

    // 擦除核心板mcu
    bool eraseMcu();

    // 发送指令重启电源
    bool sendResetSwitchPowerCmd();

    // 解析电源重启执行结果
    void resetSwitchPowerResult(QByteArray& data);

    // 重启电源成功 用于处理重启电源成功之后的行为
    void resetPowerSuccess();

    // 擦除SN 内存地址
    bool eraseSNMemory();

    // 读取核心板sn
    bool readSN(QString& data);

    // 扫描输入的sn加入尾部后缀
    void addSNTail(QString& data);

    // 将sn烧录进核心板
    bool writeSN(QString& data);

    // 重置当前记录数据
    void resetRecord();

    // 自动保存当前操作记录
    void auto_save_record(zl::ESNWT_ResultType type = zl::ESNWT_ResultType_Success);

    // 重启电源之后 读取SN
    void resetPowerDoReadSN();

    // 重启电源之后 擦除flash page
    void resetPowerDoEraseFlash();

    // 重启电源之后 一键烧录SN
    void resetPowerDoOneKeyWrite();

    // 擦除SN
    void eraseOldSN();

    // 擦除SN烧录新SN
    void eraseOldSNWriteNewSN();
protected slots:

    // 语言切换 信号槽函数
    void lang_change();

    // 提示等待 等待超时 信号槽函数
    void event_wait_timeout();

    // 用户扫描输入新sn 确认提交 信号槽函数
    void event_submit_new_sn(QString info);

    // 用户点击确认 信号槽函数
    void event_confirm_type(zl::EUserConfirmType type, bool confirm);

    // 擦除SN按钮槽函数
    void on_btn_nor_erase_sn_clicked();

    // 读取SN按钮槽函数
    void on_btn_nor_read_sn_clicked();

    // 擦除mcu按钮槽函数
    void on_btn_nor_erase_muc_clicked();

    // 一键烧录SN按钮槽函数
    void on_btn_nor_one_key_write_clicked();

private:
    Ui::MainWnd *ui;

    zl::RecordInfo record_;             // 操作记录对象

    bool enable_control_power_;         // 是否启用 通过给监控板发送指令 监控板控制核心板电源重启

    bool write_only_write_;             // 烧录SN 读取到旧的SN之后 提示擦除 不擦除 直接烧录 临时方案
};

#endif // MAINWND_H
